<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.7.10/dist/vue.js"></script>
</head>

<body>
    <div id="app">
        <input v-model="searchText">
        <!-- 在 input 等表单元素上，v-model 等价于： -->
        <input v-bind:value="searchText" v-on:input="searchText = $event.target.value">

        <custom-input v-model="searchText"></custom-input>
        <!-- 在组件上时，v-model 等价于 -->
        <custom-input v-bind:value="searchText" v-on:input="searchText = $event"></custom-input>

        {{ searchText }}
    </div>

    <script>
        // 组件需将其 value attribute 绑定到一个名叫 value 的 prop 上
        // 在其 input 事件被触发时，将新的值通过自定义的 input 事件抛出
        Vue.component('custom-input', {
            props: ['value'],
            template: `
                <input
                    v-bind:value="value"
                    v-on:input="$emit('input', $event.target.value)"
                >
            `
        })

        var vm = new Vue({
            el: "#app",
            data: {
                searchText: '',
            },
        })

    </script>
</body>

</html>